Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Лабораторна робота №3

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
Не вказано
Кафедра:
Кафедра СКС

Інформація про роботу

Рік:
2014
Тип роботи:
Лабораторна робота
Предмет:
Проектування контролерів периферійних пристроїв

Частина тексту файла

Міністерство освіти та науки України Національний університет ”Львівська політехніка” ІКТА Кафедра СКС  Лабораторна робота №3 з дисципліни «Проектування контролерів периферійних пристроїв » Львів 2014 Тема: Ознайомлення з Патерном Ітератор — Iterator Мета: Навчитися реалізовувати та застосовувати патерн Ітератор — Iterator   Уявіть, що ви розробник статегічної воєнної гри. Армія має складну структуру: вона складається із героя і трьох груп. Коли генерал видає указ і ресурси щоб полікувати всіх воїнів (герой також є воїном), ви хочете проітерувати по всіх солдатах і викликати метод Treat() на кожному екземплярі. Як це можна зробити легко і без вникання в структуру армії? Ітератор дозволяє доступатися почергово до елементів будь-якої колекції без вникання в суть її імплементації. Таким чином в застосуванні до нашої проблеми, ми хочемо щоб SoldiersIterator «пробігся» по всіх солдатах. Код нище показує використання Ітератора. var iterator = new SoldiersIterator(earthArmy); while (iterator.HasNext()) { var currSoldier = iterator.Next(); currSoldier.Treat(); } Як бачимо, ми отримали екземпляр класу ітератора SoldiersIterator. І простим циклом проходимося по всіх солдатах армії. Це дуже легко, що і є основним завданням ітератора. Армія складається із одного героя і може містити багато груп, кожна із яких може містити багато солдатів. Отже, як ми бачимо, сктуктура армії складна і деревовидна. Код нижче показує створення армії: var andriybuday = new Hero("Andriy Buday"); var earthArmy = new Army(andriybuday); var groupA = new Group(); for (int i = 1; i < 4; ++i) groupA.AddNewSoldier(new Soldier("Alpha:" + i)); var groupB = new Group(); for (int i = 1; i < 3; ++i) groupB.AddNewSoldier(new Soldier("Beta:" + i)); var groupC = new Group(); for (int i = 1; i < 2; ++i) groupC.AddNewSoldier(new Soldier("Gamma:" + i)); earthArmy.AddArmyGroup(groupB); earthArmy.AddArmyGroup(groupA); earthArmy.AddArmyGroup(groupC); Герой (Hero) — це клас унаслідуваний від солдата (Soldier) і основна різниця полягає в тому, що він має вищий початковий рівень здоров’я. class Soldier { public String Name; public int Health; private const int SoldierHealthPoints = 100; protected virtual int MaxHealthPoints { get { return SoldierHealthPoints; } } public Soldier(String name) { Name = name; } public void Treat() { Health = MaxHealthPoints; Console.WriteLine(Name); } } class Hero : Soldier { private const int HeroHealthPoints = 500; protected override int MaxHealthPoints { get { return HeroHealthPoints; } } public Hero(String name) : base(name) { } } То ж, якщо ми можемо рухатися по складній колекції так легко, де ж вся складність? Звісно, вона інкапсульована в конкретному класі ітератора. class SoldiersIterator { private readonly Army _army; private bool _heroIsIterated; private int _currentGroup; private int _currentGroupSoldier; public SoldiersIterator(Army army) { _army = army; _heroIsIterated = false; _currentGroup = 0; _currentGroupSoldier = 0; } public bool HasNext() { if (!_heroIsIterated) return true; if (_currentGroup < _army.ArmyGroups.Count) return true; if (_currentGroup == _army.ArmyGroups.Count - 1) if (_currentGroupSoldier < _army.ArmyGroups[_currentGroup].Soldiers.Count) return true; return false; } public Soldier Next() { Soldier nextSoldier; if (_currentGroup < _army.ArmyGroups.Count) { // В кожній групі ітеруємо по кожному солдату if (_currentGroupSoldier < _army.ArmyGroups[_currentGroup].Soldiers.Count) { nextSoldier = _army.ArmyGroups[_currentGroup].Soldiers[_currentGroupSoldier]; _currentGroupSoldier++; } else ...
Антиботан аватар за замовчуванням

15.12.2014 21:12

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини